package controle;

import java.io.ObjectInputStream;
import java.lang.Thread;
import java.net.Socket;

import usuario.Usuario;

import ServidorBancoDados.RepositorioJogoMySQL;


public class ServidorProtocoloHandler extends Thread{
	private Socket conexao;
	private MensagemCliente mensagemCliente;
	private MensagemServidor mensagemServidor;
	private ServidorProtocoloWorker servidorProtocoloWorker;
	private RepositorioJogoMySQL repositorio;
	private Usuario usuario;
	
	public ServidorProtocoloHandler(Socket conexao)
	{
		this.conexao = conexao;
	}
	
	public void run()
	{
		try
		{
			ObjectInputStream oi = new ObjectInputStream(conexao.getInputStream());
			this.mensagemCliente = (MensagemCliente) oi.readObject();
			decodifica();
			conexao.close();
		}
		catch(Exception e)
		{  
			e.printStackTrace();  
			System.exit(1);  
		}  
	}
	
	private void decodifica()
	{
		System.out.println("Mensagem recebida:" + mensagemCliente.getUsuario() + " Tipo: " + mensagemCliente.getTipo());
		// Aqui � o respons�vel por decodificar a mensagem enviada pelo cliente
		int tipo = this.mensagemCliente.getTipo();
		this.usuario = mensagemCliente.getUsuario();
		System.out.println("Recebido conex�o de Usu�rio: " + usuario.getEmail() +  " " + usuario.getSenha() + " " + usuario.getIp());
		switch(tipo)
		{
		case 1://conectar
		{
			this.repositorio = new RepositorioJogoMySQL();
			if(this.repositorio.verificaLogin( this.usuario.getEmail(), this.usuario.getSenha()))
			{
				Servidor.inserir(new Contato(usuario.getEmail(), usuario.getNome(), conexao.getInetAddress().getHostAddress()));
				this.mensagemServidor = new MensagemServidor(Servidor.contatos, Servidor.LOGADO, this.usuario);
				this.servidorProtocoloWorker = new ServidorProtocoloWorker(this.mensagemServidor, conexao.getInetAddress().getHostAddress());
				this.servidorProtocoloWorker.start();
			}
//			//-teste
//			System.out.println("Inserindo novo Usu�rio...");
//			Servidor.inserir(new Contato(usuario.getEmail(), usuario.getNome(), conexao.getInetAddress().getHostAddress()));
//			this.mensagemServidor = new MensagemServidor(Servidor.contatos, Servidor.LOGADO, this.usuario);
//			this.servidorProtocoloWorker = new ServidorProtocoloWorker(this.mensagemServidor, conexao.getInetAddress().getHostAddress());
//			this.servidorProtocoloWorker.start();
//			//fim do teste
			break;
		}
		case 2:
		{
			System.out.println("retirando da lista");
			Servidor.remover(mensagemCliente.getUsuario().getEmail());
			break;
		}
		case '3':
		}
		
	}
}
